﻿#ifndef DATABASEINTERFACE_H
#define DATABASEINTERFACE_H

#include <QObject>
#include <QMutex>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QSqlError>
#include <QException>

#include "datastruct.h"


class DatabaseInterface : public QObject
{
    Q_OBJECT
public:
    explicit DatabaseInterface(QSqlDatabase *sqlDatabase, QObject *parent = nullptr);
    ~DatabaseInterface();

    /**********数据库压缩体积(避免删除数据后, 体积空间没变化)*************************************************************************************/
    bool vacuumSqlite();

    /**********通道描述表*******************************************************************************************************************/
    // 查询所有要仿真模拟的通道描述
    bool getChannelDescriptionList(QList<ChannelDescription>& channelDescriptionList);
    // 查询通道系数
    bool getChannelCoefficientList(QList<double>& coefficientList);
    // 修改通道系数
    bool updateChannelCoefficient(const QList<double>& coefficientList);


    /**********通道数据表*******************************************************************************************************************/
    // 清空通道数据
    bool deleteChannelValue();
    // 批量插入通道数据
    bool insertChannelValue(const QList<ChannelValue>& channelValueList);
    // 查询通道数据
    bool getChannelValueList(const QStringList& idList, QList<ChannelValue>& channelValueList);


    /**********报表行数据表*****************************************************************************************************************/
    // 查询所有报表行描述
    bool getReportLineList(QList<ReportLine>& reportLineList);

    /**********电机驱动器指令表***************************************************************************************************************/
    // 查询所有指令
    bool getCmdList(QList<Cmd>& cmdList);

    /**********训练步骤表*******************************************************************************************************************/
    // 查询所有训练步骤
    bool getTrainStepList(QList<TrainStep>& trainStepList);

private:
    QSqlDatabase *m_sqlDatabase;

};

#endif // DATABASEINTERFACE_H
